package services

import (
	"gin-quickstart/internal/models"

	"gorm.io/gorm"
)

// BrandService 品牌服务接口
type BrandService interface {
	// 创建品牌
	CreateBrand(brand *models.Brand) error
	// 根据ID获取品牌
	GetBrandByID(id uint) (*models.Brand, error)
	// 获取所有品牌
	GetAllBrands() ([]*models.Brand, error)
	// 更新品牌信息
	UpdateBrand(brand *models.Brand) error
	// 删除品牌
	DeleteBrand(id uint) error
}

// BrandServiceImpl 品牌服务实现
type BrandServiceImpl struct {
	DB *gorm.DB
}

// NewBrandService 创建品牌服务实例
func NewBrandService(db *gorm.DB) BrandService {
	return &BrandServiceImpl{DB: db}
}

// CreateBrand 创建品牌
func (s *BrandServiceImpl) CreateBrand(brand *models.Brand) error {
	// 可以在这里添加业务逻辑验证，例如检查品牌名称是否已存在
	var existingBrand models.Brand
	result := s.DB.Where("BRAND_NAME = ?", brand.BrandName).First(&existingBrand)
	if result.RowsAffected > 0 {
		return gorm.ErrDuplicatedKey
	}

	// 执行保存操作
	return s.DB.Create(brand).Error
}

// GetBrandByID 根据ID获取品牌
func (s *BrandServiceImpl) GetBrandByID(id uint) (*models.Brand, error) {
	var brand models.Brand
	err := s.DB.First(&brand, id).Error
	if err != nil {
		return nil, err
	}
	return &brand, nil
}

// GetAllBrands 获取所有品牌
func (s *BrandServiceImpl) GetAllBrands() ([]*models.Brand, error) {
	var brands []*models.Brand
	err := s.DB.Find(&brands).Error
	if err != nil {
		return nil, err
	}
	return brands, nil
}

// UpdateBrand 更新品牌信息
func (s *BrandServiceImpl) UpdateBrand(brand *models.Brand) error {
	// 可以在这里添加业务逻辑验证
	return s.DB.Save(brand).Error
}

// DeleteBrand 删除品牌
func (s *BrandServiceImpl) DeleteBrand(id uint) error {
	// 可以在这里添加业务逻辑，例如检查是否存在关联的产品
	return s.DB.Delete(&models.Brand{}, id).Error
}
